import router from '@/router'
import pinia from '@/store'
import { useUserInfoStore } from '@/store/userInfo'

const userInfoStore = useUserInfoStore(pinia)

// 不用进行token检查的白名单路径数组(不需要登陆(指没有token)就可以访问的页面是白名单)
const whiteList = [
    '/login', 
    '/home', 
    '/worth_buy', 
    "/loginWithEmail",
    "/loginWithPhone",
    "/password",
    "/search",
    "/classify"
]
// const whiteList = ['/login']

// 路由加载前
router.beforeEach(async (to, from, next) => {
    const token = userInfoStore.token
    // 如果token存在(已经登陆或前面登陆过)
    if (token) {
        // 如果请求的是登陆路由
        if (to.path === '/login') {
            // 直接跳转到根路由
            next({ path: '/' })
        } else {
            // 请求的不是登陆路由
            // 判断是否存在个人信息
            let isLogin = false;
            if (userInfoStore.userInfoData) {
                isLogin = !!userInfoStore.userInfoData.loginName
            } else {
                userInfoStore.token = ""
            }
            // 如果已经登陆直接放行
            if (isLogin) {
                next()
            } else {
                // 如果还没有登陆
                try {
                    // 异步请求获取用户信息(包含权限数据) ==> 动态注册用户的权限路由 => 当次跳转不可见
                    await userInfoStore.userInfo()
                    next(to) // 重新跳转去目标路由, 能看到动态添加的异步路由, 且不会丢失参数
                } catch (error: any) {
                    // 如果请求处理过程中出错
                    // 重置用户信息
                    //   await userInfoStore.logout()
                    //   // 跳转到登陆页面, 并携带原本要跳转的路由路径, 用于登陆成功后跳转
                    //   next(`/login?redirect=${to.path}`)
                }
            }
        }
    } else {
        // 没有token
        // 如果目标路径在白名单中(是不需要token的路径)
        if (whiteList.indexOf(to.path) !== -1) {
            // 放行
            next()
        } else {
            // 如果没在白名单中, 跳转到登陆路由携带原目标路径
            next(`/login?redirect=${to.path}`)
        }
    }
})

// 路由加载后
router.afterEach(() => { })
